package com.jinwei.qunguanjia.system.service;

import com.jinwei.qunguanjia.system.dto.SysDeptDTO;

import java.util.List;

/**
 * 部门管理 服务层
 *
 * @author yuanzs
 */
public interface SysDeptService {
    /**
     * 保存接口
     * @param sysDeptDTO 对象
     */
    void save(SysDeptDTO sysDeptDTO) throws IllegalAccessException;

    /**
     * 根据主键id删除接口
     * @param id 主键
     */
    void remove(String id);

    /**
     *  根据主键id修改接口
     * @param sysDeptDTO 对象
     */
    void update(SysDeptDTO sysDeptDTO) throws IllegalAccessException;

    /**
     *  根据主键id获取单条详细
     * @param id 主键
     * @return SysMenuDTO 对象
     */
    SysDeptDTO get(String id);

    /**
     *  根据查询条件获取单条详细
     * @param sysDeptDTO 对象条件
     * @return SysMenuDTO 对象
     */
    SysDeptDTO get(SysDeptDTO sysDeptDTO) throws IllegalAccessException;

    /**
     *  根据查询条件获取总数
     * @param sysDeptDTO 对象条件
     * @return 总数
     */
    Long count(SysDeptDTO sysDeptDTO) throws IllegalAccessException;

    /**
     *  根据查询条件获取列表
     * @param sysDeptDTO 对象条件
     * @return list结果
     */
    List<SysDeptDTO> list(SysDeptDTO sysDeptDTO);

    /**
     * 根据ID查询所有子部门（正常状态）
     *
     * @param deptId 部门ID
     * @return 子部门数
     */
    Integer countNormalChildrenDeptById(String deptId);

    /**
     * 根据角色ID查询部门树信息
     *
     * @param roleId 角色ID
     * @return 选中部门列表
     */
    List<String> listDeptByRoleId(String roleId);

    /**
     * 校验部门是否有数据权限
     *
     * @param deptId 部门id
     */
    void checkDeptDataScope(String deptId) throws IllegalAccessException;

    /**
     * 校验部门名称是否唯一
     *
     * @param sysDeptDTO 部门信息
     * @return 结果
     */
    String checkDeptNameUnique(SysDeptDTO sysDeptDTO) throws IllegalAccessException;

    /**
     * 是否存在部门子节点
     *
     * @param deptId 部门ID
     * @return 结果
     */
    boolean hasChildByDeptId(String deptId) throws IllegalAccessException;

    /**
     * 查询部门是否存在用户
     *
     * @param deptId 部门ID
     * @return 结果 true 存在 false 不存在
     */
    boolean checkDeptExistUser(String deptId) throws IllegalAccessException;
}
